package zlmedia_sdk

type GetMediaListReq struct {
	Schema string `json:"schema,omitempty" url:"schema,omitempty"` //筛选协议，例如 rtsp或rtmp
	Vhost  string `json:"vhost,omitempty" url:"vhost,omitempty"`   //筛选虚拟主机，例如__defaultVhost__
	App    string `json:"app,omitempty" url:"app,omitempty"`       //筛选应用名，例如 live
	Stream string `json:"stream,omitempty" url:"stream,omitempty"` //筛选流id，例如 test
}

func (receiver GetMediaListReq) api() string {
	return "/index/api/getMediaList"
}

type GetMediaListRes struct {
	ResCommon
	Data []struct {
		App              string `json:"app"`                //应用名
		ReaderCount      int64  `json:"reader_count"`       //本协议观看人数
		TotalReaderCount int64  `json:"total_reader_count"` //观看总人数，包括hls/rtsp/rtmp/http-flv/ws-flv
		Schema           string `json:"schema"`             //协议
		Stream           string `json:"stream"`             //流id
		OriginSock       struct {
			Identifier string `json:"identifier"`
			LocalIp    string `json:"local_ip"`
			LocalPort  int    `json:"local_port"`
			PeerIp     string `json:"peer_ip"`
			PeerPort   int    `json:"peer_port"`
		} `json:"origin_sock,omitempty"` //客户端和服务器网络信息，可能为null类型
		OriginType    int    `json:"origin_type"`     //  产生源类型，包括 unknown = 0,rtmp_push=1,rtsp_push=2,rtp_push=3,pull=4,ffmpeg_pull=5,mp4_vod=6,device_chn=7
		OriginTypeStr string `json:"origin_type_str"` //
		OriginUrl     string `json:"originUrl"`       //产生源的url
		CreateStamp   int64  `json:"create_stamp"`    //GMT unix系统时间戳，单位秒
		AliveSecond   int64  `json:"alive_second"`    //存活时间，单位秒
		BytesSpeed    int64  `json:"bytes_speed"`     //数据产生速度，单位byte/s
		Vhost         string `json:"vhost"`           // 虚拟主机名
		Tracks        []struct {
			//共有
			CodecId     int    `json:"codec_id"`      // H264 = 0, H265 = 1, AAC = 2, G711A = 3, G711U = 4
			CodecIdName string `json:"codec_id_name"` //编码类型名称
			CodecType   int    `json:"codec_type"`    //Video = 0, Audio = 1
			Ready       bool   `json:"ready"`         //轨道是否准备就绪
			Frames      int64  `json:"frames"`        //累计接收帧数, 视频不包含sei/aud/sps/pps等不能解码的帧

			//音频轨道
			Channels   int   `json:"channels,omitempty"`    //音频通道数
			SampleBit  int64 `json:"sample_bit,omitempty"`  //音频采样位数
			SampleRate int64 `json:"sample_rate,omitempty"` //音频采样率

			//视频轨道
			Fps           float64 `json:"fps,omitempty"`
			GopIntervalMs int64   `json:"gop_interval_ms,omitempty"` //gop间隔时间，单位毫秒
			GopSize       int64   `json:"gop_size,omitempty"`        //gop大小，单位帧数
			KeyFrames     int64   `json:"key_frames,omitempty"`      //累计接收关键帧数
			Height        int     `json:"height,omitempty"`          //视频高
			Width         int     `json:"width,omitempty"`           //视频宽

		} `json:"tracks"` //音视频轨道
	} `json:"data,omitempty"`
}

func (c *ZLMediaClient) GetMediaList(req *GetMediaListReq) (res GetMediaListRes, err error) {
	err = c.Request(req, &res)
	return
}
